{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Histograms, Binnings, and Density"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A simple histogram can be a great first step in understanding a dataset.\n",
    "Earlier, we saw a preview of Matplotlib's histogram function (see [Comparisons, Masks, and Boolean Logic](02.06-Boolean-Arrays-and-Masks.ipynb)), which creates a basic histogram in one line, once the normal boiler-plate imports are done:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('seaborn-white')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "  np.random.randn?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### `np.random.randn` 返回服从正态分布的随机数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = np.random.randn(1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "axis = "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The ``hist()`` function has many options to tune both the calculation and the display; \n",
    "here's an example of a more customized histogram:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.hist?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(data, bins=30,  alpha=0.8,   #normed正态分布，bins是箱子\n",
    "         histtype='stepfilled', color='steelblue',\n",
    "         edgecolor='none');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The ``plt.hist`` docstring has more information on other customization options available.\n",
    "I find this combination of ``histtype='stepfilled'`` along with some transparency ``alpha`` to be very useful when comparing histograms of several distributions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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u+++qx//+Mdqbm7Wxx9/rIqKClmWpdzcXNXW1iolZXLbXGbdppienh5t27ZN6enpiS5lTD/72c+0cOFCtbS0qL6+Xj/4wQ8SXdIwQ5dmbty4UVu3bk10SaN65ZVXlJmZqdbWVu3atUt1dXWJLmlM0WhUNTU1ysjISHQpYwqFQnrnnXf08ssvq7m5eeqruWbAm2++qb6+Pu3du1dlZWXavn17oksaZteuXaqqqlJvb68kqb6+XoFAQK2trbJtW21tbZM+56wKa9u2VV1draefflpXX311ossZ05o1a7RixQpJlyYU3Nb9x1ua6RaPPPKINmzYEHvu5snsbdu2acWKFbrpppsSXcqY3nrrLS1YsEBlZWVat26dFi9enOiSxpSdna3+/n4NDAyop6dn2AIHN7jtttvU2NgYe97R0SGfzydJKioqUjAYnPQ53fUTTsKvf/1r/fznPx/22i233KJHH31Ud911V4KqGmm0Ords2aK7775bXV1d2rRpkyorKxNU3ejiLc10C4/n0jVYenp69OSTTyoQCCS4otHt379f119/vRYtWqSf/vSniS5nTN3d3Tpx4oSampp0/PhxrV+/Xn/4wx9kWVaiSxth7ty56uzs1JIlS9Td3a2mpqZElzSM3+/X8eOX11rbth37PXo8HoXDk9/P4a5/fZOwfPnyEeNpxcXF2rdvn/bt26euri6tXbtWe/bsSVCFl4xWpyQdO3ZMTz/9tJ555pnY/7huEW9pppucPHlSZWVlWrVqlR577LFElzOqffv2ybIsHTx4UEePHlV5eblefPFFzZ8/P9GlDZOZmamcnBylp6crJydHc+bM0blz53TDDTckurQRXnrpJT3wwAPauHGjTp48qSeeeEK///3vXfdX6qCh49ORSERer3fS53Dnv8Ap+tOf/hR7/NBDD2n37t0JrGZsH3zwgTZs2KDt27e76q+AQfGWZrrFmTNntHbtWtXU1Oj+++9PdDljGtowlJaWavPmza4Lakm677779Itf/ELf+c539Omnn+rChQvKzHTn1Qy9Xq+uuuoqSdK1116rvr6+UXf9uUVeXp5CoZAKCwvV3t6uhQsXTvocsyqsTfH888/r4sWL+tGPfiTpUifrpmurFBcX6+2339aKFStiSzPdqKmpSefPn9eOHTu0Y8cOSZcmdtw8iedmDz74oA4dOqRly5bJtm3V1NS4dh5gzZo1qqys1KpVqxSNRvXUU09p7ty5iS5rTOXl5aqurlZDQ4NycnLk9/snfY5ZuXQPAGabWbUaBABmK8IaAAxAWAOAAQhrADAAYQ0ABiCsAcAAhDUAGICwBgAD/B/zNi00C0jKcgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x1 = np.random.normal(0, 0.8, 1000)  #均值为0，标准差为0.8\n",
    "x2 = np.random.normal(-2, 1, 1000)\n",
    "x3 = np.random.normal(3, 2, 1000)\n",
    "\n",
    "kwargs = dict(histtype='stepfilled', alpha=0.3, bins=40)\n",
    "\n",
    "plt.hist(x1, **kwargs) #传入字典\n",
    "plt.hist(x2, **kwargs)\n",
    "plt.hist(x3, **kwargs);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If you would like to simply compute the histogram (that is, count the number of points in a given bin) and not display it, the ``np.histogram()`` function is available:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 29 199 453 277  42]\n"
     ]
    }
   ],
   "source": [
    "counts, bin_edges = np.histogram(data, bins=5)\n",
    "print(counts)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Two-Dimensional Histograms and Binnings\n",
    "\n",
    "Just as we create histograms in one dimension by dividing the number-line into bins, we can also create histograms in two-dimensions by dividing points among two-dimensional bins.\n",
    "We'll take a brief look at several ways to do this here.\n",
    "We'll start by defining some data—an ``x`` and ``y`` array drawn from a multivariate Gaussian distribution:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "mean = [0, 0]\n",
    "cov = [[1, 1], [1, 2]]\n",
    "x, y = np.random.multivariate_normal(mean, cov, 10000).T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ``plt.hist2d``: Two-dimensional histogram\n",
    "\n",
    "One straightforward way to plot a two-dimensional histogram is to use Matplotlib's ``plt.hist2d`` function:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f561c9e1710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist2d(x, y, bins=30, cmap='Blues')\n",
    "cb = plt.colorbar()\n",
    "cb.set_label('counts in bin')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Just as with ``plt.hist``, ``plt.hist2d`` has a number of extra options to fine-tune the plot and the binning, which are nicely outlined in the function docstring.\n",
    "Further, just as ``plt.hist`` has a counterpart in ``np.histogram``, ``plt.hist2d`` has a counterpart in ``np.histogram2d``, which can be used as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "counts, xedges, yedges = np.histogram2d(x, y, bins=30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For the generalization of this histogram binning in dimensions higher than two, see the ``np.histogramdd`` function."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ``plt.hexbin``: Hexagonal binnings\n",
    "\n",
    "The two-dimensional histogram creates a tesselation of squares across the axes.\n",
    "Another natural shape for such a tesselation is the regular hexagon.\n",
    "For this purpose, Matplotlib provides the ``plt.hexbin`` routine, which will represents a two-dimensional dataset binned within a grid of hexagons:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nMbDj6U9vUgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f55f3c5d3c8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hexbin(x, y, gridsize=30, cmap='Blues')\n",
    "cb = plt.colorbar(label='count in bin')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "``plt.hexbin`` has a number of interesting options, including the ability to specify weights for each point, and to change the output in each bin to any NumPy aggregate (mean of weights, standard deviation of weights, etc.)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Kernel density estimation\n",
    "\n",
    "Another common method of evaluating densities in multiple dimensions is *kernel density estimation* (KDE).\n",
    "This will be discussed more fully in [In-Depth: Kernel Density Estimation](05.13-Kernel-Density-Estimation.ipynb), but for now we'll simply mention that KDE can be thought of as a way to \"smear out\" the points in space and add up the result to obtain a smooth function.\n",
    "One extremely quick and simple KDE implementation exists in the ``scipy.stats`` package.\n",
    "Here is a quick example of using the KDE on this data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f55ebb1d438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.stats import gaussian_kde\n",
    "\n",
    "# fit an array of size [Ndim, Nsamples]\n",
    "data = np.vstack([x, y])\n",
    "kde = gaussian_kde(data)\n",
    "\n",
    "# evaluate on a regular grid\n",
    "xgrid = np.linspace(-3.5, 3.5, 40)\n",
    "ygrid = np.linspace(-6, 6, 40)\n",
    "Xgrid, Ygrid = np.meshgrid(xgrid, ygrid)\n",
    "Z = kde.evaluate(np.vstack([Xgrid.ravel(), Ygrid.ravel()]))\n",
    "\n",
    "# Plot the result as an image\n",
    "plt.imshow(Z.reshape(Xgrid.shape),\n",
    "           origin='lower', aspect='auto',\n",
    "           extent=[-3.5, 3.5, -6, 6],\n",
    "           cmap='Blues')\n",
    "cb = plt.colorbar()\n",
    "cb.set_label(\"density\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "KDE has a smoothing length that effectively slides the knob between detail and smoothness (one example of the ubiquitous bias–variance trade-off).\n",
    "The literature on choosing an appropriate smoothing length is vast: ``gaussian_kde`` uses a rule-of-thumb to attempt to find a nearly optimal smoothing length for the input data.\n",
    "\n",
    "Other KDE implementations are available within the SciPy ecosystem, each with its own strengths and weaknesses; see, for example, ``sklearn.neighbors.KernelDensity`` and ``statsmodels.nonparametric.kernel_density.KDEMultivariate``.\n",
    "For visualizations based on KDE, using Matplotlib tends to be overly verbose.\n",
    "The Seaborn library, discussed in [Visualization With Seaborn](04.14-Visualization-With-Seaborn.ipynb), provides a much more terse API for creating KDE-based visualizations."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<!--NAVIGATION-->\n",
    "< [Density and Contour Plots](04.04-Density-and-Contour-Plots.ipynb) | [Contents](Index.ipynb) | [Customizing Plot Legends](04.06-Customizing-Legends.ipynb) >"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
